package com.glory.erp.auth.emp.service.impl;

import java.io.Serializable;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import com.glory.erp.auth.base.BaseQueryModel;
import com.glory.erp.auth.emp.bean.Emp;
import com.glory.erp.auth.emp.dao.EmpDao;
import com.glory.erp.auth.emp.service.EmpService;
import com.glory.erp.auth.role.bean.Role;
import com.glory.erp.exception.AppException;
import com.glory.erp.util.MD5Utils;

/**
 * @Description: 员工业务实现
 * @Title: EmpServiceImpl.java
 * @Author: 樊双峰
 * @Date: 2018年5月18日 上午12:53:35
 * @Version V1.0
 */
public class EmpServiceImpl implements EmpService {

	/**
	 * 注入 EmpDao
	 */
	private EmpDao empDao;

	public void setEmpDao(EmpDao empDao) {
		this.empDao = empDao;
	}

	public Emp login(String userName, String password, String lastLoginIp) {
		password = MD5Utils.md5(password);
		Emp emp = empDao.getEmpByNameAndPassword(userName, password);
		if (emp != null) {
			// 登录次数+1
			emp.setLoginTimes(emp.getLoginTimes() + 1);
			// 最后登录时间
			emp.setLastLoginTime(System.currentTimeMillis());
			// 最后登录IP
			emp.setLastLoginIp(lastLoginIp);
		}
		return emp;
	}

	// 已废弃
	public void save(Emp emp) {
	}

	// 已废弃
	public void update(Emp emp) {
	}

	public void delete(Emp t) {
		empDao.delete(t);
	}

	public List<Emp> findAll() {
		return empDao.findAll();
	}

	public Emp findById(Serializable uuid) {
		return empDao.findById(uuid);
	}

	public List<Emp> findAll(BaseQueryModel qm, Integer pageNum,
			Integer pageCount) {
		return empDao.findAll(qm, pageNum, pageCount);
	}

	public Integer getCount(BaseQueryModel qm) {
		return empDao.getCount(qm);
	}

	public boolean changePwd(String userName, String password,
			String newPassword1, String newPassword2) {
		password = MD5Utils.md5(password);
		newPassword1 = MD5Utils.md5(newPassword1);
		newPassword2 = MD5Utils.md5(newPassword2);
		return empDao.updatePwd(userName, password, newPassword1, newPassword2);
	}

	// 原 save 方法已废弃
	public void save(Emp emp, Long[] roleUuids) {
		// 如果用户名没有输入，那么认定为特殊错误现象
		if (emp.getUserName() == null || emp.getUserName().trim().length() == 0) {
			// 抛出异常
			throw new AppException("INFO_EMP_USERNAME_IS_EMPTY");
		}
		Set<Role> roles = new HashSet<Role>();
		for (Long uuid : roleUuids) {
			Role r = new Role();
			r.setUuid(uuid);
			roles.add(r);
		}
		emp.setRoles(roles);
		// 对密码加密
		emp.setPassword(MD5Utils.md5(emp.getPassword()));
		// 设置默认值
		emp.setLastLoginTime(System.currentTimeMillis());
		emp.setLastLoginIp("-");
		emp.setLoginTimes(0);
		empDao.save(emp);
	}

	// 原 update 方法已废弃
	public void update(Emp emp, Long[] roleUuids) {
		// 使用快照思想，完成修改————逻辑更新：软更新
		Emp e = empDao.findById(emp.getUuid());
		e.setName(emp.getName());
		e.setEmail(emp.getEmail());
		e.setTele(emp.getTele());
		e.setGender(emp.getGender());
		e.setAddress(emp.getAddress());
		e.setDept(emp.getDept());
		
		Set<Role> roles = new HashSet<Role>();
		for (Long uuid : roleUuids) {
			Role r = new Role();
			r.setUuid(uuid);
			roles.add(r);
		}
		e.setRoles(roles);
	}

	public List<Emp> findByDept(Long uuid) {
		return empDao.findAllByDeptUuid(uuid);
	}
}